// fn largest_i32(list: &[i32]) -> &i32 {
//     let mut largest = &list[0];

//     for item in list {
//         if item > largest {
//             largest = item;
//         }
//     }

//     largest
// }

// fn largest_char(list: &[char]) -> &char {
//     let mut largest = &list[0];

//     for item in list {
//         if item > largest {
//             largest = item;
//         }
//     }

//     largest
// }
// fn largest(list: &[T]) -> &T {
//     let mut largest = &list[0];

//     for item in list {
//         if item > largest {
//             largest = item;
//         }
//     }

//     largest
// }

// fn main() {
//     let number_list = vec![34, 50, 25, 100, 65];

//     let result = largest(&number_list);
//     println!("The largest number is {}", result);
//     assert_eq!(*result, 100);

//     let char_list = vec!['y', 'm', 'a', 'q'];

//     let result = largest(&char_list);
//     println!("The largest char is {}", result);
//     assert_eq!(*result, 'y');
// }

//结构体中的泛型
//一个泛型
// struct Point<T> {
//     x: T,
//     y: T,
// }
// //方法中的泛型
// impl<T> Point<T> {
//     fn x(&self) -> &T {
//         &self.x
//     }
// }
// //两个泛型
// struct Rect<T, U> {
//     x: T,
//     y: U,
// }
// fn main() {
//     let integer = Point { x: 5, y: 10 };
//     let float = Point { x: 1.0, y: 10.0 };
//     // let wont_work = Point { x: 5, y: 4.0 }; //编译不通过
//     // let both = Rect { x: 5, y: 10 }; //不通过
//     let not = Rect { x: 5, y: 10.2 };

//     println!("p.x={}", integer.x());
// }

//10-10
struct Point<X1,Y1>{
    x:X1,
    y:Y1,
}
impl<X1,Y1> Point<X1,Y1>{
    fn mixup<X2,Y2>(self, other: Point<X2,Y2>) -> Point<X1,Y2>{
        Point{
            x:self.x,
            y:other.y,
        }
    }
}
fn main(){
    let p1 = Point{x:5,y:10.4};
    let p2 = Point{x:"Hello",y:'c'};

    let p3 = p1.mixup(p2);
    println!("p3.x = {},p3.y ={}",p3.x,p3.y);
}